package com.yaolaizaixian.merchant.receiver;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;

import com.yaolaizaixian.merchant.bean.PushData;
import com.yaolaizaixian.merchant.order.OrderListActivity;
import com.yaolaizaixian.merchant.order.PayCodeActivity;
import com.yaolaizaixian.merchant.utils.ExampleUtil;
import com.yaolaizaixian.merchant.utils.GsonUtil;

import org.json.JSONException;
import org.json.JSONObject;

import java.util.Iterator;

import cn.jpush.android.api.JPushInterface;

/**
 * 自定义接收器
 * 
 * 如果不定义这个 Receiver，则：
 * 1) 默认用户会打开主界面
 * 2) 接收不到自定义消息
 */
public class MyReceiver extends BroadcastReceiver {
	private static final String TAG = "JPush";

	@Override
	public void onReceive(Context context, Intent intent) {

        Bundle bundle = intent.getExtras();

		Log.d(TAG, "[MyReceiver] onReceive - " + intent.getAction() + ", extras: " + printBundle(bundle));
		
        if (JPushInterface.ACTION_REGISTRATION_ID.equals(intent.getAction())) {
            String regId = bundle.getString(JPushInterface.EXTRA_REGISTRATION_ID);
            Log.d(TAG, "[MyReceiver] 接收Registration Id : " + regId);
            //send the Registration Id to your server...
                        
        } else if (JPushInterface.ACTION_MESSAGE_RECEIVED.equals(intent.getAction())) {
        	Log.d(TAG, "[MyReceiver] 接收到推送下来的自定义消息: " + bundle.getString(JPushInterface.EXTRA_MESSAGE));
        	processCustomMessage(context, bundle);

        } else if (JPushInterface.ACTION_NOTIFICATION_RECEIVED.equals(intent.getAction())) {

			Log.d(TAG, "[MyReceiver] 接收到推送下来的通知");
            int notifactionId = bundle.getInt(JPushInterface.EXTRA_NOTIFICATION_ID);
            Log.d(TAG, "[MyReceiver] 接收到推送下来的通知的ID: " + notifactionId);
        	
        } else if (JPushInterface.ACTION_NOTIFICATION_OPENED.equals(intent.getAction())) {

			Log.d(TAG, "[MyReceiver] 用户点击打开了通知");
			String content = bundle.getString(JPushInterface.EXTRA_ALERT);
			String title = bundle.getString(JPushInterface.EXTRA_NOTIFICATION_TITLE);
			String extras = bundle.getString(JPushInterface.EXTRA_EXTRA);

	/*		StringBuilder showMsg = new StringBuilder();

			if (!ExampleUtil.isEmpty(title)) {

				showMsg.append(  "title: " + title + "\n");
			}
			if (!ExampleUtil.isEmpty(content)) {

				showMsg.append( " message: " + content + "\n");

			}

			JSONObject jsonObject = null;

				try {

				    jsonObject = new JSONObject(extras);

					Log.e("LY","订单ID"+ jsonObject.getString("sysno"));


			} catch (JSONException e) {

				e.printStackTrace();

				Log.e("LY", "转换失败");

			}

			String url = jsonObject.optString("url");
//
			if (PayCodeActivity.isForeground) {


//				SharedPreferencesUtil.getString(context, "Shopname", mysysno);



			}

//			Log.e(TAG,json);

				if (!ExampleUtil.isEmpty(url)) {

				showMsg.append( "url : " + url + "\n");
			}*/

			if (!TextUtils.isEmpty(extras))
			{

				JSONObject myJsonObject = null;

				try {
					//获取data
					myJsonObject = new JSONObject(extras);
					String param= myJsonObject.getString("param");
					if (!TextUtils.isEmpty(param))
					{
						param = param.replace("\\", "");
						Log.e("LY",param);
						PushData pushData=GsonUtil.jsonToBean(param, PushData.class);
						String orderId=pushData.getData().getSysno();
						Log.e("LY", orderId);
						//如果支付二维码在前台，并且订单号等于当前订单号
						if (PayCodeActivity.isForeground&&PayCodeActivity.mysysno.equals(orderId)) {

							//当前订单正在处理，点击后没反应
						}
						else
						{
							//打开自定义的Activity
							Intent i = new Intent(context, OrderListActivity.class);
							//i.putExtra("url",showMsg.toString());
							//将此订单标红
							i.putExtra("red",orderId);
							//  i.putExtras(bundle);
							//  i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
							i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP );
							context.startActivity(i);
						}
					}

				} catch (JSONException e) {

					e.printStackTrace();
					Log.e(TAG,e.toString());
				}
			}

        }

		else if (JPushInterface.ACTION_RICHPUSH_CALLBACK.equals(intent.getAction())) {

			Log.d(TAG, "[MyReceiver] 用户收到到RICH PUSH CALLBACK: " + bundle.getString(JPushInterface.EXTRA_EXTRA));
            //在这里根据 JPushInterface.EXTRA_EXTRA 的内容处理代码，比如打开新的Activity， 打开一个网页等..
        }
		else if(JPushInterface.ACTION_CONNECTION_CHANGE.equals(intent.getAction())) {

        	boolean connected = intent.getBooleanExtra(JPushInterface.EXTRA_CONNECTION_CHANGE, false);

			Log.w(TAG, "[MyReceiver]" + intent.getAction() +" connected state change to "+connected);

		}
		else {

			Log.d(TAG, "[MyReceiver] Unhandled intent - " + intent.getAction());
        }
	}

	// 打印所有的 intent extra 数据
	private static String printBundle(Bundle bundle) {

		StringBuilder sb = new StringBuilder();

		for (String key : bundle.keySet()) {
			if (key.equals(JPushInterface.EXTRA_NOTIFICATION_ID)) {
				sb.append("\nkey:" + key + ", value:" + bundle.getInt(key));
			}else if(key.equals(JPushInterface.EXTRA_CONNECTION_CHANGE)){
				sb.append("\nkey:" + key + ", value:" + bundle.getBoolean(key));
			} else if (key.equals(JPushInterface.EXTRA_EXTRA)) {
				if (TextUtils.isEmpty(bundle.getString(JPushInterface.EXTRA_EXTRA))) {
					Log.i(TAG, "This message has no Extra data");
					continue;
				}

				try {
					JSONObject json = new JSONObject(bundle.getString(JPushInterface.EXTRA_EXTRA));
					Iterator<String> it =  json.keys();

					while (it.hasNext()) {
						String myKey = it.next().toString();
						sb.append("\nkey:" + key + ", value: [" +
								myKey + " - " +json.optString(myKey) + "]");
					}
				} catch (JSONException e) {
					Log.e(TAG, "Get message extra JSON error!");
				}

			} else {
				sb.append("\nkey:" + key + ", value:" + bundle.getString(key));
			}
		}
		return sb.toString();
	}
	
	//透传消息
	private void processCustomMessage(Context context, Bundle bundle) {

		if (PayCodeActivity.isForeground) {

			String message = bundle.getString(JPushInterface.EXTRA_MESSAGE);
			String extras = bundle.getString(JPushInterface.EXTRA_EXTRA);
			Intent msgIntent = new Intent(PayCodeActivity.MESSAGE_RECEIVED_ACTION);
			msgIntent.putExtra(PayCodeActivity.KEY_MESSAGE, message);

			if (!ExampleUtil.isEmpty(extras)) {
				try {
					JSONObject extraJson = new JSONObject(extras);
					if (extraJson.length() > 0) {
						msgIntent.putExtra(PayCodeActivity.KEY_EXTRAS, extras);
					}
				} catch (JSONException e) {

				}

			}
			context.sendBroadcast(msgIntent);
		}
	}
}
